package com.x.Part2_Exception类.Try_Catch;

import org.junit.Test;

import java.sql.Array;

/**
 * ClassName: Demo
 * Package: IntelliJ IDEA
 * Description:
 * Written by HanXu
 * Create 2024.03.17 16:06
 */
public class Demo {
    public static void main(String[] args) {

    }

    @Test
    public void test1(){

        int[] arr = {1,2,3,4};

        try{

            System.out.println(arr[10]);//此处出现了异常，程序就会在这里创建一个ArrayIndexOutOfBoundsException对象
                                        //new ArrayIndexOutOfBoundsException();
                                        //拿着这个对象到catch的小括号中对比，看括号中的变量是否可以接收这个对象
                                        //如果能被接收，就表示该异常就被捕获（抓住），执行catch里面对应的代码
                                        //当catch里面所有的代码执行完毕，继续执行try...catch体系下面的其他代码
            System.out.println(2/0);
            System.out.println("略略略");
        }catch(ArrayIndexOutOfBoundsException e){   //自己处理（捕获异常）灵魂四问：
                                                    //灵魂二问：如果ty中可能会遇到多个问题，怎么执行？
                                                    //会写多个catch与之对应

                                                    //细节：
                                                    //如果我们要捕获多个异常，这些异常中如果存在父子关系的话，那么父类一定要写在下面
                                                    //了解：
                                                    //在DK7之后，我们可以在catch中同时捕获多个异常，中间用|进行隔开
                                                    //表示如果出现了A异常或者B异常的话，采取同一种处理方案
            System.out.println("索引越界");
        }catch (ArithmeticException e){
            System.out.println("算数异常");
        }
    }

    @Test
    public void test2(){

        int[] arr = {1,2,3,4};

        try{
            System.out.println(arr[10]);
            System.out.println("略略略");//不执行
        }catch(ArrayIndexOutOfBoundsException e){


            //System.out.println(e.toString());  //返回异常类型和简短描述
            //System.out.println(e.getMessage());//返回简短描述字符串

            e.printStackTrace();                 //以红色字体输出错误信息
                                                 //但是不会结束虚拟机，后边的代码仍然继续执行
            System.out.println("略略略");//执行

        }catch (ArithmeticException e){
            System.out.println("算数异常");
        }
        System.out.println("略略略");        //执行
    }
}
